// src/stores/user.ts
import {defineStore} from 'pinia'
import {computed, ref} from 'vue'
import {getUserInfoApi} from '@/api/auth' // + 导入 API
import type {UserInfo} from '@/types/api/user' // + 导入类型

export const useUserStore = defineStore(
  'user',
  () => {
    const token = ref<string | null>(null)
    const userInfo = ref<UserInfo | null>(null) // + 新增 userInfo state

    // + 新增一个 computed 属性来判断是否登录
    const isAuthenticated = computed(() => !!token.value)

    // 设置 Token 的 action
    function setToken(newToken: string) {
      token.value = newToken
    }

    // + 新增：获取并设置用户信息的 action
    async function fetchUserInfo() {
      if (!token.value) return // 如果没有 token，则不执行

      try {
        const data = await getUserInfoApi()
        console.log(data)
        userInfo.value = data
        return data
      } catch (error) {
        // 如果获取失败（例如 token 过期），则清空所有状态
        await logout()
        return Promise.reject(error)
      }
    }

    // 登出 Action
    async function logout() {
      token.value = null
      userInfo.value = null
      // 可以在这里添加其他清理逻辑，例如清空其他 store
    }

    return {
      token,
      userInfo,
      isAuthenticated,
      setToken,
      fetchUserInfo,
      logout
    }
  },
  {
    persist: {
      // 只持久化 token
      paths: ['token']
    }
  }
)
